home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Utilities / Post / Source / Options.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-01  |  20.9 KB  |  802 lines

  1. #include "PostPre.h"
  2. #include "PostWin.h"
  3. #include "Global.h"
  4.  
  5. int        init_selected=0, max_selected=-1;
  6. struct    Node    *node_selected = NULL;
  7.  
  8. struct Node *get_node(void)
  9. {
  10.     struct    Node *node;
  11.     int        i;
  12.  
  13.     node = TempOptions.startuplist.lh_Head;
  14.     for(i=0; i < init_selected; i++) 
  15.     {
  16.         node = node->ln_Succ;
  17.     }
  18.     return(node);
  19. }
  20.  
  21. int OptWidthClicked( void )
  22. {
  23.     /* routine when gadget "_Width" is clicked. */
  24.  
  25.     TempOptions.PostOpts.width = GetNumber(OptionsGadgets[GD_OptWidth]);
  26.     return(0);
  27. }
  28.  
  29. int OptHeightClicked( void )
  30. {
  31.     /* routine when gadget "Height" is clicked. */
  32.  
  33.     TempOptions.PostOpts.height = GetNumber(OptionsGadgets[GD_OptHeight]);
  34.     return(0);
  35. }
  36.  
  37. int OptXOffClicked( void )
  38. {
  39.     /* routine when gadget "XOffset" is clicked. */
  40.  
  41.     TempOptions.PostOpts.xoff = GetNumber(OptionsGadgets[GD_OptXOff]);
  42.     return(0);
  43. }
  44.  
  45. int OptYOffClicked( void )
  46. {
  47.     /* routine when gadget "YOffset" is clicked. */
  48.  
  49.     TempOptions.PostOpts.yoff = GetNumber(OptionsGadgets[GD_OptYOff]);
  50.     return(0);
  51. }
  52.  
  53. int OptXDPIClicked( void )
  54. {
  55.     /* routine when gadget "XDPI" is clicked. */
  56.  
  57.     TempOptions.PostOpts.xdpi = GetNumber(OptionsGadgets[GD_OptXDPI]);
  58.     return(0);
  59. }
  60.  
  61. int OptYDPIClicked( void )
  62. {
  63.     /* routine when gadget "YDPI" is clicked. */
  64.  
  65.     TempOptions.PostOpts.ydpi = GetNumber(OptionsGadgets[GD_OptYDPI]);
  66.     return(0);
  67. }
  68.  
  69. int OptStartUpClicked( void )
  70. {
  71.     /* routine when gadget "_Startup File(s)" is clicked. */
  72.  
  73.     init_selected = OptionsMsg.Code;
  74.     node_selected = get_node();
  75. /*    sprintf(undobuff, "init = %d, max = %d, node = %lx",
  76.             init_selected, max_selected, node_selected);
  77.     okmsg(undobuff);*/
  78.     return(0);
  79. }
  80.  
  81. int OptNewClicked( void )
  82. {
  83.     /* routine when gadget "_New" is clicked. */
  84.  
  85.     struct startupnode *startupnode;
  86.  
  87. /*    sprintf(undobuff, "head = %lx, tail = %lx tailpred = %lx",
  88.             TempOptions.startuplist.lh_Head, TempOptions.startuplist.lh_Tail,
  89.             TempOptions.startuplist.lh_TailPred);
  90.     okmsg(undobuff);
  91.     sprintf(undobuff, "init = %d, max = %d, node = %lx",
  92.             init_selected, max_selected, node_selected);
  93.     okmsg(undobuff);*/
  94.  
  95.     if (AslRequestTags(fontrequester,
  96.         ASLFR_InitialPattern,    (ULONG) "",
  97.         ASLFR_InitialDrawer,    (ULONG) "POST:",
  98.         ASLFR_InitialFile, (ULONG) "",
  99.         ASLFR_InitialHeight, 300,
  100.         ASLFR_TitleText,        (ULONG) "Select new init-file",
  101.         ASLFR_DoSaveMode,        FALSE,
  102.         ASLFR_Window,            (ULONG) OutputWnd,
  103.         TAG_DONE) == NULL) return(0);
  104.     strcpy(undobuff, fontrequester->rf_Dir);
  105.     if(AddPart(undobuff, fontrequester->rf_File, MAXFILENAME) == FALSE) return(0);
  106.     if(startupnode = (struct startupnode *) malloc(sizeof(struct startupnode)))
  107.     {
  108.         strcpy(startupnode->name, undobuff);
  109.         startupnode->linknode.ln_Name = startupnode->name;
  110.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptStartUp], OptionsWnd, NULL,
  111.             GTLV_Labels, ~0, TAG_DONE);
  112.         Insert(&TempOptions.startuplist, (struct Node *) startupnode, node_selected);
  113.     }
  114.     init_selected++;
  115.     max_selected++;
  116.     node_selected = get_node();
  117.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptStartUp], OptionsWnd, NULL,
  118.         GTLV_Labels, (ULONG) &(TempOptions.startuplist), GTLV_Selected, init_selected, GTLV_Top, init_selected, TAG_DONE);
  119.     return(0);
  120. }
  121.  
  122. int OptDelClicked( void )
  123. {
  124.     /* routine when gadget "_Del" is clicked. */
  125.  
  126. /*    sprintf(undobuff, "head = %lx, tail = %lx tailpred = %lx",
  127.             TempOptions.startuplist.lh_Head, TempOptions.startuplist.lh_Tail,
  128.             TempOptions.startuplist.lh_TailPred);
  129.     okmsg(undobuff);
  130.     sprintf(undobuff, "init = %d, max = %d, node = %lx",
  131.             init_selected, max_selected, node_selected);
  132.     okmsg(undobuff);*/
  133.     if(max_selected == -1)
  134.     {
  135. /*        okmsg("nothing to delete");*/
  136.         return(0);
  137.     }
  138.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptStartUp], OptionsWnd, NULL,
  139.         GTLV_Labels, ~0, TAG_DONE);
  140.     Remove(node_selected);
  141.     free(node_selected);
  142. /*    okmsg("node freed");
  143.     sprintf(undobuff, "head = %lx, tail = %lx tailpred = %lx",
  144.             TempOptions.startuplist.lh_Head, TempOptions.startuplist.lh_Tail,
  145.             TempOptions.startuplist.lh_TailPred);
  146.     okmsg(undobuff);*/
  147.     if(init_selected == max_selected) init_selected--;
  148.     max_selected--;
  149.     node_selected = get_node();
  150. /*    sprintf(undobuff, "init = %d, max = %d, node = %lx",
  151.             init_selected, max_selected, node_selected);
  152.     okmsg(undobuff);*/
  153.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptStartUp], OptionsWnd, NULL,
  154.         GTLV_Labels, (ULONG) &(TempOptions.startuplist), GTLV_Selected, init_selected, GTLV_Top, init_selected, TAG_DONE);
  155.     return(0);
  156. }
  157.  
  158. int OptFontsClicked( void )
  159. {
  160.     /* routine when gadget "Fonts" is clicked. */
  161.  
  162.     TempOptions.PostOpts.fonts = GetNumber(OptionsGadgets[GD_OptFonts]);
  163.     return(0);
  164. }
  165.  
  166. int OptHtoneClicked( void )
  167. {
  168.     /* routine when gadget "Htone" is clicked. */
  169.  
  170.     TempOptions.PostOpts.htone = GetNumber(OptionsGadgets[GD_OptHtone]);
  171.     return(0);
  172. }
  173.  
  174. int OptVMClicked( void )
  175. {
  176.     /* routine when gadget "VM" is clicked. */
  177.  
  178.     TempOptions.PostOpts.vm = GetNumber(OptionsGadgets[GD_OptVM]);
  179.     return(0);
  180. }
  181.  
  182. int OptPathsClicked( void )
  183. {
  184.     /* routine when gadget "Paths" is clicked. */
  185.  
  186.     TempOptions.PostOpts.paths = GetNumber(OptionsGadgets[GD_OptPaths]);
  187.     return(0);
  188. }
  189.  
  190. int OptSaveClicked( void )
  191. {
  192.     /* routine when gadget "_Save" is clicked. */
  193.  
  194.     SavePostOptions(saveopts[opt_number], &TempOptions);
  195.     SavePostOptions(useopts[opt_number], &TempOptions);
  196.     return(Options_OK);
  197. }
  198.  
  199. int OptUseClicked( void )
  200. {
  201.     /* routine when gadget "_Use" is clicked. */
  202.  
  203.     SavePostOptions(useopts[opt_number], &TempOptions);
  204.     return(Options_OK);
  205. }
  206.  
  207. int OptCancelClicked( void )
  208. {
  209.     /* routine when gadget "_Cancel" is clicked. */
  210.  
  211.     return(Options_CANCEL);
  212. }
  213.  
  214. int OptColorClicked( void )
  215. {
  216.     /* routine when gadget "" is clicked. */
  217.  
  218.     switch(OptionsMsg.Code)
  219.     {
  220.         case 0:
  221.             TempOptions.PostOpts.depth = 1;
  222.             break;
  223.  
  224.         case 1:
  225.             TempOptions.PostOpts.depth = 3;
  226.             break;
  227.  
  228.         case 2:
  229.             TempOptions.PostOpts.depth = 4;
  230.             break;
  231.     }
  232.     return(0);
  233. }
  234.  
  235. int OptPrDenClicked( void )
  236. {
  237.     /* routine when gadget "_Printer Density" is clicked. */
  238.  
  239.     TempOptions.PostOpts.prden = OptionsMsg.Code+1;
  240.     return(0);
  241. }
  242.  
  243. int OptIffClicked( void )
  244. {
  245.     /* routine when gadget "_IFF File Name" is clicked. */
  246.  
  247.     strcpy(TempOptions.PostOpts.iffname, GetString(OptionsGadgets[GD_OptIff]));
  248.     return(0);
  249. }
  250.  
  251. int OptFromClicked( void )
  252. {
  253.     /* routine when gadget "_From" is clicked. */
  254.  
  255.     TempOptions.PostOpts.from = GetNumber(OptionsGadgets[GD_OptFrom]);
  256.     if(TempOptions.PostOpts.from < 1 || TempOptions.PostOpts.from > number_of_pages)
  257.     {
  258.         TempOptions.PostOpts.from = 1;
  259.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL,
  260.             GTIN_Number, TempOptions.PostOpts.from, TAG_DONE);
  261.         ActivateGadget(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL);
  262.     }
  263.     else ActivateGadget(OptionsGadgets[GD_OptTo], OptionsWnd, NULL);
  264.     return(0);
  265. }
  266.  
  267. int OptToClicked( void )
  268. {
  269.     /* routine when gadget "To" is clicked. */
  270.  
  271.     TempOptions.PostOpts.to = GetNumber(OptionsGadgets[GD_OptTo]);
  272.     if(TempOptions.PostOpts.to < 1 || TempOptions.PostOpts.to > number_of_pages || TempOptions.PostOpts.to < TempOptions.PostOpts.from)
  273.     {
  274.         TempOptions.PostOpts.to = number_of_pages;
  275.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptTo], OptionsWnd, NULL,
  276.             GTIN_Number, TempOptions.PostOpts.to, TAG_DONE);
  277.         ActivateGadget(OptionsGadgets[GD_OptTo], OptionsWnd, NULL);
  278.     }
  279.     return(0);
  280. }
  281.  
  282. int OptAllPagesClicked( void )
  283. {
  284.     /* routine when gadget "_All Pages" is clicked. */
  285.  
  286.     doopts_allpages();
  287.     return(0);
  288. }
  289.  
  290. int OptGetIffClicked( void )
  291. {
  292.     /* routine when gadget "" is clicked. */
  293.  
  294.     if (opt_number != MENU_IFF) return(0);
  295.     if (AslRequestTags(fontrequester,
  296.         ASLFR_InitialPattern,    (ULONG) "",
  297.         ASLFR_InitialDrawer,    (ULONG) "",
  298.         ASLFR_InitialFile, (ULONG) TempOptions.PostOpts.iffname,
  299.         ASLFR_InitialHeight, 300,
  300.         ASLFR_TitleText,        (ULONG) "Select iff-file",
  301.         ASLFR_DoSaveMode,        FALSE,
  302.         ASLFR_Window,            (ULONG) OutputWnd,
  303.         TAG_DONE) == NULL) return(0);
  304.     strcpy(undobuff, fontrequester->rf_Dir);
  305.     if(AddPart(undobuff, fontrequester->rf_File, MAXFILENAME) == FALSE) return(0);
  306.     strcpy(TempOptions.PostOpts.iffname, undobuff);
  307.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptIff], OptionsWnd, NULL,
  308.         GTST_String, (ULONG) &(TempOptions.PostOpts.iffname), TAG_DONE);
  309.     return(0);
  310. }
  311.  
  312. int OptFFClicked( void )
  313. {
  314.     /* routine when gadget "_FormFeed" is clicked. */
  315.  
  316.     TempOptions.PostOpts.formfeed = !TempOptions.PostOpts.formfeed;
  317.     return(0);
  318. }
  319.  
  320. int OptCenterClicked( void )
  321. {
  322.     /* routine when gadget "_CenterPage" is clicked. */
  323.  
  324.     TempOptions.PostOpts.centerpage = !TempOptions.PostOpts.centerpage;
  325.     return(0);
  326. }
  327.  
  328. int OptBandClicked( void )
  329. {
  330.     /* routine when gadget "_Bandsize" is clicked. */
  331.  
  332.     TempOptions.PostOpts.bandsize = GetNumber(OptionsGadgets[GD_OptBand]);
  333.     return(0);
  334. }
  335.  
  336. int OptBandrenderClicked( void )
  337. {
  338.     /* routine when gadget "_Bandrendering" is clicked. */
  339.  
  340.     doopts_band();
  341.     return(0);
  342. }
  343.  
  344. int OptGraphiccardClicked( void )
  345. {
  346.     /* routine when gadget "Path" is clicked. */
  347.  
  348.     TempOptions.graphiccard = !TempOptions.graphiccard;
  349.     return(0);
  350. }
  351.  
  352. int OptBufferClicked( void )
  353. {
  354.     /* routine when gadget "Buffer" is clicked. */
  355.  
  356.     if (GetNumber(OptionsGadgets[GD_OptBuffer]) >= BUFSIZ)
  357.         TempOptions.bufsize = GetNumber(OptionsGadgets[GD_OptBuffer]);
  358.     else
  359.     {
  360.         TempOptions.bufsize = BUFSIZ;
  361.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptBuffer], OptionsWnd, NULL,
  362.             GTIN_Number, BUFSIZ, TAG_DONE);
  363.         ActivateGadget(OptionsGadgets[GD_OptBuffer], OptionsWnd, NULL);
  364.     }
  365.     return(0);
  366. }
  367.  
  368. int OptTemppathClicked( void )
  369. {
  370.     /* routine when gadget "Path" is clicked. */
  371.  
  372.     strcpy(TempOptions.temppath, GetString(OptionsGadgets[GD_OptTemppath]));
  373.     delete_tempfiles();
  374.     return(0);
  375. }
  376.  
  377. int OptionsCloseWindow( void )
  378. {
  379.     /* routine for "IDCMP_CLOSEWINDOW". */
  380.  
  381.     return(Options_CANCEL);
  382. }
  383.  
  384. int OptionsVanillaKey( void )
  385. {
  386.     /* routine for "IDCMP_VANILLAKEY". */
  387.  
  388.  
  389.     switch (OptionsMsg.Code)
  390.     {
  391.         case    'c':
  392.         case    'C':
  393.             return(Options_CANCEL);
  394.  
  395.         case    'u':
  396.         case    'U':
  397.             SavePostOptions(useopts[opt_number], &TempOptions);
  398.             return(Options_OK);
  399.  
  400.         case    's':
  401.         case    'S':
  402.             SavePostOptions(saveopts[opt_number], &TempOptions);
  403.             SavePostOptions(useopts[opt_number], &TempOptions);
  404.             return(Options_OK);
  405.  
  406.         case    'w':
  407.         case    'W':
  408.             ActivateGadget(OptionsGadgets[GD_OptWidth], OptionsWnd, NULL);
  409.             break;
  410.  
  411.         case    'b':
  412.         case    'B':
  413.             TempOptions.PostOpts.depth = 1;
  414.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptColor], OptionsWnd, NULL,
  415.                 GTMX_Active, 0, TAG_DONE);
  416.             break;
  417.  
  418.         case    'r':
  419.         case    'R':
  420.             TempOptions.PostOpts.depth = 3;
  421.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptColor], OptionsWnd, NULL,
  422.                 GTMX_Active, 1, TAG_DONE);
  423.             break;
  424.  
  425.         case    'm':
  426.         case    'M':
  427.             TempOptions.PostOpts.depth = 4;
  428.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptColor], OptionsWnd, NULL,
  429.                 GTMX_Active, 2, TAG_DONE);
  430.             break;
  431.  
  432.         case    'a':
  433.         case    'A':
  434.             if (opt_number == MENU_NEW) break;
  435.             doopts_allpages();
  436.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptAllPages], OptionsWnd, NULL,
  437.                 GTCB_Checked, TempOptions.PostOpts.allpages, TAG_DONE);
  438.             break;
  439.  
  440.         case    'd':
  441.         case    'D':
  442.             if (opt_number == MENU_NEW) break;
  443.             doopts_band();
  444.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptBandrender], OptionsWnd, NULL,
  445.                 GTCB_Checked, TempOptions.PostOpts.bandrendering, TAG_DONE);
  446.             break;
  447.  
  448.         default:
  449.             break;
  450.     }
  451.     return(0);
  452. }
  453.  
  454. void    setoptionsgadgets(int mode)
  455. {
  456.     int    mx;
  457.  
  458.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptWidth], OptionsWnd, NULL,
  459.         GTIN_Number, TempOptions.PostOpts.width, TAG_DONE);
  460.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptHeight], OptionsWnd, NULL,
  461.         GTIN_Number, TempOptions.PostOpts.height, TAG_DONE);
  462.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptXOff], OptionsWnd, NULL,
  463.         GTIN_Number, TempOptions.PostOpts.xoff, TAG_DONE);
  464.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptYOff], OptionsWnd, NULL,
  465.         GTIN_Number, TempOptions.PostOpts.yoff, TAG_DONE);
  466.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptXDPI], OptionsWnd, NULL,
  467.         GTIN_Number, TempOptions.PostOpts.xdpi, TAG_DONE);
  468.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptYDPI], OptionsWnd, NULL,
  469.         GTIN_Number, TempOptions.PostOpts.ydpi, TAG_DONE);
  470.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptFonts], OptionsWnd, NULL,
  471.         GTIN_Number, TempOptions.PostOpts.fonts, TAG_DONE);
  472.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptHtone], OptionsWnd, NULL,
  473.         GTIN_Number, TempOptions.PostOpts.htone, TAG_DONE);
  474.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptVM], OptionsWnd, NULL,
  475.         GTIN_Number, TempOptions.PostOpts.vm, TAG_DONE);
  476.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptPaths], OptionsWnd, NULL,
  477.         GTIN_Number, TempOptions.PostOpts.paths, TAG_DONE);
  478.  
  479.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptBand], OptionsWnd, NULL,
  480.         GTIN_Number, TempOptions.PostOpts.bandsize, TAG_DONE);
  481.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL,
  482.         GTIN_Number, TempOptions.PostOpts.from, TAG_DONE);
  483.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptTo], OptionsWnd, NULL,
  484.         GTIN_Number, TempOptions.PostOpts.to, TAG_DONE);
  485.  
  486.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptPrDen], OptionsWnd, NULL,
  487.         GTCY_Active, TempOptions.PostOpts.prden-1, TAG_DONE);
  488.  
  489.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptFF], OptionsWnd, NULL,
  490.         GTCB_Checked, TempOptions.PostOpts.formfeed, TAG_DONE);
  491.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptCenter], OptionsWnd, NULL,
  492.         GTCB_Checked, TempOptions.PostOpts.centerpage, TAG_DONE);
  493.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptAllPages], OptionsWnd, NULL,
  494.         GTCB_Checked, TempOptions.PostOpts.allpages, TAG_DONE);
  495.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptBandrender], OptionsWnd, NULL,
  496.         GTCB_Checked, TempOptions.PostOpts.bandrendering, TAG_DONE);
  497.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptIff], OptionsWnd, NULL,
  498.         GTST_String, (ULONG) &(TempOptions.PostOpts.iffname), TAG_DONE);
  499.  
  500.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptGraphiccard], OptionsWnd, NULL,
  501.         GTCB_Checked, TempOptions.graphiccard, TAG_DONE);
  502.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptBuffer], OptionsWnd, NULL,
  503.         GTIN_Number, TempOptions.bufsize, TAG_DONE);
  504.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptTemppath], OptionsWnd, NULL,
  505.         GTST_String, (ULONG) &(TempOptions.temppath), TAG_DONE);
  506.  
  507.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptStartUp], OptionsWnd, NULL,
  508.         GTLV_Labels, (ULONG) &(TempOptions.startuplist), GTLV_Selected, init_selected, GTLV_Top, init_selected, TAG_DONE);
  509.  
  510.     if(number_of_pages)
  511.     {
  512.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptAllPages], OptionsWnd, NULL,
  513.             GA_Disabled, FALSE, TAG_DONE);
  514.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptBandrender], OptionsWnd, NULL,
  515.             GA_Disabled, FALSE, TAG_DONE);
  516.         if(TempOptions.PostOpts.bandrendering)
  517.         {
  518.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptBand], OptionsWnd, NULL,
  519.                 GA_Disabled, FALSE, TAG_DONE);
  520.         }
  521.         if(TempOptions.PostOpts.allpages == FALSE)
  522.         {
  523.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL,
  524.                 GA_Disabled, FALSE, TAG_DONE);
  525.             GT_SetGadgetAttrs(OptionsGadgets[GD_OptTo], OptionsWnd, NULL,
  526.                 GA_Disabled, FALSE, TAG_DONE);
  527.         }
  528.     }
  529.     if(TempOptions.PostOpts.depth == 1) mx = 0;
  530.     else if(TempOptions.PostOpts.depth == 3) mx = 1;
  531.     else mx = 2;
  532.     GT_SetGadgetAttrs(OptionsGadgets[GD_OptColor], OptionsWnd, NULL,
  533.         GTMX_Active, mx, TAG_DONE);
  534. }
  535.  
  536. void LoadPostOptions(char *name, struct Options *opts)
  537. {
  538.     FILE    *datei;
  539.     char    buffer[256];
  540.     char    *pointer;
  541.     int    i;
  542.     struct    Options loadedopts;
  543.     struct    startupnode *startupnode;
  544.     extern    int    errno;
  545.  
  546.     if((datei = fopen(name, "r")) == NULL)
  547.     {
  548.         sprintf(buffer, "can't open '%s'!", name);
  549.         okmsg(buffer);
  550.         return;
  551.     }
  552.  
  553.     pointer = (char *) &loadedopts;
  554.     errno = 0;
  555.     for(i=0; i < sizeof(struct Options); i++)
  556.     {
  557.         if(((*pointer) = fgetc(datei)) == EOF)
  558.         {
  559.             if(errno)
  560.             {
  561.                 fclose(datei);
  562.                 okmsg("unexpected end of file!");
  563.                 return;
  564.             }
  565.         }
  566.         pointer++;
  567.     }
  568.     if(strcmp("POST", (char *) &loadedopts) || loadedopts.chk != sizeof(struct Options))
  569.     {
  570.         sprintf(buffer, "file '%s' is not a valid options file!", name);
  571.         okmsg(buffer);
  572.         fclose(datei);
  573.         return;
  574.     }
  575.     free_list(&opts->startuplist);
  576.     *opts = loadedopts;
  577.     NewList(&opts->startuplist);
  578.     max_selected = -1;
  579.     init_selected = -1;
  580.     node_selected = NULL;
  581.     while(fgets(buffer, 256, datei))
  582.     {
  583.         buffer[strlen(buffer)-1] = '\0';
  584.         if(startupnode = (struct startupnode *) malloc(sizeof(struct startupnode)))
  585.         {
  586.             strcpy(startupnode->name, buffer);
  587.             startupnode->linknode.ln_Name = startupnode->name;
  588.             AddTail(&opts->startuplist, (struct Node *) startupnode);
  589.             node_selected = (struct Node *) startupnode;
  590.             max_selected++;
  591.             init_selected++;
  592. /*            sprintf(undobuff, "init = %d, max = %d, node = %lx",
  593.                     init_selected, max_selected, node_selected);
  594.             okmsg(undobuff);*/
  595.         }
  596.     }
  597.     fclose(datei);
  598. }
  599.  
  600. void SavePostOptions(char *name, struct Options *opts)
  601. {
  602.     FILE    *datei;
  603.     char    buffer[256];
  604.     char    *pointer;
  605.     int    i;
  606.     struct Node *node;
  607.  
  608.     if((datei = fopen(name, "w")) == NULL)
  609.     {
  610.         sprintf(buffer, "can't open '%s'!", name);
  611.         okmsg(buffer);
  612.         return;
  613.     }
  614.     pointer = (char *) opts;
  615.     for(i=0; i < sizeof(struct Options); i++)
  616.     {
  617.         if(fputc((*pointer), datei) == EOF)
  618.         {
  619.             fclose(datei);
  620.             sprintf(buffer, "can't write to '%s'!", name);
  621.             okmsg(buffer);
  622.             return;
  623.         }
  624.         pointer++;
  625.     }
  626.     for(node = opts->startuplist.lh_Head; node->ln_Succ; node = node->ln_Succ)
  627.     {
  628.         sprintf(buffer, "%s\n", node->ln_Name);
  629.         if(fputs(buffer, datei))
  630.         {
  631.             fclose(datei);
  632.             sprintf(buffer, "can't write to '%s'!", name);
  633.             okmsg(buffer);
  634.             break;
  635.         }
  636.     }
  637.     fclose(datei);
  638. }
  639.  
  640. int OptionsMenuOpen( void )
  641. {
  642.     /* routine when (sub)item "Open ..." is selected. */
  643.  
  644.     if (AslRequestTags(fontrequester,
  645.         ASLFR_InitialPattern,(ULONG) "",
  646.         ASLFR_InitialDrawer,    (ULONG) "ENVARC:",
  647.         ASLFR_InitialFile,     (ULONG) "",
  648.         ASLFR_InitialHeight, 300,
  649.         ASLFR_TitleText,        (ULONG) "Select options-file to load",
  650.         ASLFR_DoSaveMode,        FALSE,
  651.         ASLFR_Window,            (ULONG) OutputWnd,
  652.         TAG_DONE) == NULL) return(0);
  653.     strcpy(undobuff, fontrequester->rf_Dir);
  654.     if(AddPart(undobuff, fontrequester->rf_File, MAXFILENAME) == FALSE) return(0);
  655.     LoadPostOptions(undobuff, &TempOptions);
  656.     setoptionsgadgets(0);
  657.     return(0);
  658. }
  659.  
  660. int OptionsMenuSave( void )
  661. {
  662.     /* routine when (sub)item "Save As ..." is selected. */
  663.  
  664.     if (AslRequestTags(fontrequester,
  665.         ASLFR_InitialPattern,(ULONG) "",
  666.         ASLFR_InitialDrawer,    (ULONG) "ENVARC:",
  667.         ASLFR_InitialFile,     (ULONG) "",
  668.         ASLFR_InitialHeight, 300,
  669.         ASLFR_TitleText,        (ULONG) "Select options-file to save",
  670.         ASLFR_DoSaveMode,        TRUE,
  671.         ASLFR_Window,            (ULONG) OutputWnd,
  672.         TAG_DONE) == NULL) return(0);
  673.     strcpy(undobuff, fontrequester->rf_Dir);
  674.     if(AddPart(undobuff, fontrequester->rf_File, MAXFILENAME) == FALSE) return(0);
  675.     SavePostOptions(undobuff, &TempOptions);
  676.     return(0);
  677. }
  678.  
  679. int OptionsMenuDefaults( void )
  680. {
  681.     /* routine when (sub)item "Reset To Defaults" is selected. */
  682.  
  683.     copy_options(&TempOptions, &DefaultOptions);
  684. /*    NewList(&(TempOptions.startuplist));
  685.     max_selected = -1;
  686.     init_selected = -1;
  687.     node_selected = NULL;    
  688.     for(node = DefaultOptions.startuplist.lh_Head; node->ln_Succ; node = node->ln_Succ)
  689.     {
  690.         if(startupnode = (struct startupnode *) malloc(sizeof(struct startupnode)))
  691.         {
  692.             strcpy(startupnode->name, node->ln_Name);
  693.             startupnode->linknode.ln_Name = startupnode->name;
  694.             node_selected = (struct Node *) startupnode;
  695.             max_selected++;
  696.             init_selected++;
  697.             AddTail(&(TempOptions.startuplist), (struct Node *) startupnode);
  698.         }
  699.     }*/
  700.     setoptionsgadgets(0);
  701.     return(0);
  702. }
  703.  
  704. int OptionsMenuLastSaved( void )
  705. {
  706.     /* routine when (sub)item "Last Saved" is selected. */
  707.  
  708.     LoadPostOptions(saveopts[opt_number], &TempOptions);
  709.     setoptionsgadgets(0);
  710.     return(0);
  711. }
  712.  
  713.  
  714. void    init_list(struct List *list)
  715. {
  716.     struct    startupnode *startupnode;
  717.  
  718.     NewList(list);
  719.     if(startupnode = (struct startupnode *) malloc(sizeof(struct startupnode)))
  720.     {
  721.         strcpy(startupnode->name, STD_STARTUP);
  722.         startupnode->linknode.ln_Name = startupnode->name;
  723.         AddTail(list, (struct Node *) startupnode);
  724.     }
  725.     max_selected = 0;
  726.     init_selected = 0;
  727.     node_selected = (struct  Node *) startupnode;
  728. }
  729.  
  730. void    free_list(struct List *list)
  731. {
  732.     struct    Node *node, *nextnode;
  733.  
  734.     for(node = list->lh_Head; node->ln_Succ;)
  735.     {
  736.         nextnode=node->ln_Succ;
  737.         free(node);
  738.         node=nextnode;
  739.     }
  740.     NewList(list);
  741. }
  742.  
  743. void    copy_options(struct Options *to, struct Options *from)
  744. {
  745.     struct    Node    *node;
  746.     struct    startupnode    *startupnode;
  747.  
  748.     *to = *from;
  749.     NewList(&(to->startuplist));
  750.     max_selected = -1;
  751.     init_selected = -1;
  752.     node_selected = NULL;    
  753.     for(node = from->startuplist.lh_Head; node->ln_Succ; node = node->ln_Succ)
  754.     {
  755.         if(startupnode = (struct startupnode *) malloc(sizeof(struct startupnode)))
  756.         {
  757.             strcpy(startupnode->name, node->ln_Name);
  758.             startupnode->linknode.ln_Name = startupnode->name;
  759.             node_selected = (struct Node *) startupnode;
  760.             max_selected++;
  761.             init_selected++;
  762.             AddTail(&(to->startuplist), (struct Node *) startupnode);
  763.         }
  764.     }
  765. }
  766.  
  767. void    doopts_band(void)
  768. {
  769.     TempOptions.PostOpts.bandrendering = !TempOptions.PostOpts.bandrendering;
  770.     if(TempOptions.PostOpts.bandrendering)
  771.     {
  772.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptBand], OptionsWnd, NULL,
  773.             GA_Disabled, FALSE, TAG_DONE);
  774.         ActivateGadget(OptionsGadgets[GD_OptBand], OptionsWnd, NULL);
  775.     }
  776.     else
  777.     {
  778.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptBand], OptionsWnd, NULL,
  779.             GA_Disabled, TRUE, TAG_DONE);
  780.     }
  781. }
  782.  
  783. void    doopts_allpages(void)
  784. {
  785.     TempOptions.PostOpts.allpages = !TempOptions.PostOpts.allpages;
  786.     if(TempOptions.PostOpts.allpages == FALSE)
  787.     {
  788.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL,
  789.             GA_Disabled, FALSE, TAG_DONE);
  790.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptTo], OptionsWnd, NULL,
  791.             GA_Disabled, FALSE, TAG_DONE);
  792.         ActivateGadget(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL);
  793.     }
  794.     else
  795.     {
  796.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptFrom], OptionsWnd, NULL,
  797.             GA_Disabled, TRUE, TAG_DONE);
  798.         GT_SetGadgetAttrs(OptionsGadgets[GD_OptTo], OptionsWnd, NULL,
  799.             GA_Disabled, TRUE, TAG_DONE);
  800.     }
  801. }
  802.